<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of pessoa_cadastro_model
 *
 * @author link
 */
class Pessoa_model extends CI_Model {

    public function __construct() {
        parent::__construct();
        $this->load->config('parametros');
    }

    public function get_status() {
        $this->db->select($this->config->item('tblPessoaStatusInfo') . '.pessoa_status_id, ' . $this->config->item('tblPessoaStatusInfo') . '.nome');
        $this->db->where($this->config->item('tblLocalIdiomas') . '.codigo', $this->config->item('language'));
        $this->db->join($this->config->item('tblLocalIdiomas'), $this->config->item('tblLocalIdiomas') . '.id = ' . $this->config->item('tblPessoaStatusInfo') . '.local_idiomas_id');

        $query = $this->db->get($this->config->item('tblPessoaStatusInfo'));

        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }

    public function get_cpf($_cpf, $_id = '') {
        $this->db->where($this->config->item('tblPessoaTipoFisica') . '.cpf', $_cpf);

        if ($_id != '') {
            $this->db->where($this->config->item('tblPessoaTipoFisica') . '.pessoa_id !=', $_id);
        }
        $query = $this->db->get($this->config->item('tblPessoaTipoFisica'));

        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }

    public function get_email($_email, $_id = '') {
        $this->db->where($this->config->item('tblPessoaContato') . '.email', $_email);
        if ($_id != '') {
            $this->db->where($this->config->item('tblPessoaContato') . '.pessoa_id !=', $_id);
        }
        $query = $this->db->get($this->config->item('tblPessoaContato'));
        //pre($this->db->last_query());
        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }

    public function cadastrar($_dados = array()) {
        $this->db->set($_dados);
        $this->db->insert($this->config->item('dbCliente') . $this->config->item('tblPessoa'));
        if ($this->db->affected_rows() > 0) {
            return $this->db->insert_id();
        } else {
            return NULL;
        }
    }

    public function alterar($_dados, $_id) {
        $this->db->where('id', $_id);
        $this->db->set($_dados);
        $this->db->update($this->config->item('dbCliente') . $this->config->item('tblPessoa'));
        if ($this->db->affected_rows() > 0) {
            return $_id;
        } else {
            return NULL;
        }
    }

    public function cadastrar_p_fisica($_dados = array()) {
        $this->db->set($_dados);
        $this->db->insert($this->config->item('dbCliente') . $this->config->item('tblPessoaTipoFisica'));
        if ($this->db->affected_rows() > 0) {
            return $this->db->insert_id();
        } else {
            return NULL;
        }
    }

    public function alterar_p_fisica($_dados, $_id) {
        $this->db->where('pessoa_id', $_id);
        $this->db->set($_dados);
        $this->db->update($this->config->item('dbCliente') . $this->config->item('tblPessoaTipoFisica'));
        if ($this->db->affected_rows() > 0) {
            return $_id;
        } else {
            return NULL;
        }
    }

    public function cadastrar_p_contato($_dados = array()) {
        $this->db->set($_dados);
        $this->db->insert($this->config->item('dbCliente') . $this->config->item('tblPessoaContato'));
        if ($this->db->affected_rows() > 0) {
            return $this->db->insert_id();
        } else {
            return NULL;
        }
    }

    public function alterar_p_contato($_dados, $_id, $_tipoContato = null) {
        $this->db->where('pessoa_id', $_id);

        if ($_tipoContato != null) {
            $this->db->where('pessoa_contato_tipo_id', $_tipoContato);
        }

        $this->db->set($_dados);
        $this->db->update($this->config->item('dbCliente') . $this->config->item('tblPessoaContato'));
        if ($this->db->affected_rows() > 0) {
            return $_id;
        } else {
            return NULL;
        }
    }

    public function cadastrar_p_endereco($_dados = array()) {
        $this->db->set($_dados);
        $this->db->insert($this->config->item('dbCliente') . $this->config->item('tblPessoaEndereco'));
        if ($this->db->affected_rows() > 0) {
            return $this->db->insert_id();
        } else {
            return NULL;
        }
    }

    public function alterar_p_endereco($_dados, $_id, $_tipo) {
        $this->db->where('pessoa_id', $_id);
        $this->db->where('pessoa_endereco_tipo_id', $_tipo);
        $this->db->set($_dados);
        $this->db->update($this->config->item('dbCliente') . $this->config->item('tblPessoaEndereco'));
        if ($this->db->affected_rows() > 0) {
            return $_id;
        } else {
            return NULL;
        }
    }

    public function cadastrar_p_externa($_dados = array()) {
        $this->db->set($_dados);
        $this->db->insert($this->config->item('dbCliente') . $this->config->item('tblPessoaExterna'));
        if ($this->db->affected_rows() > 0) {
            return $this->db->insert_id();
        } else {
            return NULL;
        }
    }

    public function alterar_p_externa($_dados, $_id) {
        $this->db->where('pessoa_id', $_id);
        $this->db->set($_dados);
        $this->db->update($this->config->item('dbCliente') . $this->config->item('tblPessoaExterna'));
        if ($this->db->affected_rows() > 0) {
            return $_id;
        } else {
            return NULL;
        }
    }

    public function cadastrar_p_usuario($_dados = array()) {
        $this->db->set($_dados);
        $this->db->insert($this->config->item('dbCliente') . $this->config->item('tblPessoaUsuario'));
        if ($this->db->affected_rows() > 0) {
            return $this->db->insert_id();
        } else {
            return NULL;
        }
    }

    public function alterar_p_extra($_dados, $_id) {
        $this->db->where('pessoa_id', $_id);
        $this->db->set($_dados);
        $this->db->update($this->config->item('dbCliente') . $this->config->item('tblPessoaDadosExtra'));
        if ($this->db->affected_rows() > 0) {
            return $_id;
        } else {
            return NULL;
        }
    }

    public function cadastrar_p_extra($_dados = array()) {
        $this->db->set($_dados);
        $this->db->insert($this->config->item('dbCliente') . $this->config->item('tblPessoaDadosExtra'));
        if ($this->db->affected_rows() > 0) {
            return $this->db->insert_id();
        } else {
            return NULL;
        }
    }

    public function alterar_p_usuario($_dados, $_id) {
        $this->db->where('pessoa_id', $_id);
        $this->db->set($_dados);
        $this->db->update($this->config->item('dbCliente') . $this->config->item('tblPessoaUsuario'));
        if ($this->db->affected_rows() > 0) {
            return $_id;
        } else {
            return NULL;
        }
    }

    public function consultar_usuario($pessoa, $senha) {
        $this->db->where($this->config->item('tblPessoaUsuario') . '.pessoa_id', $pessoa);
        $this->db->where($this->config->item('tblPessoaUsuario') . '.senha', $senha);
        $query = $this->db->get($this->config->item('tblPessoaUsuario'));

        if ($this->db->affected_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }

    public function consultar_p_usuario($_usuario, $_senha) {
        $this->db->select($this->config->item('tblPessoa') . '.id,'
                . $this->config->item('tblPessoa') . '.status_id,'
                . $this->config->item('tblPessoa') . '.nome,'
                . $this->config->item('tblPessoa') . '.referencia,'
                . $this->config->item('tblPessoaContato') . '.email,'
                . $this->config->item('tblPessoaContato') . '.telefone,'
                . $this->config->item('tblPessoaEndereco') . '.cep,'
                . $this->config->item('tblPessoaEndereco') . '.logradouro,'
                . $this->config->item('tblPessoaEndereco') . '.endereco,'
                . $this->config->item('tblPessoaEndereco') . '.numero,'
                . $this->config->item('tblPessoaEndereco') . '.bairro,'
                . $this->config->item('tblPessoaEndereco') . '.cidade,'
                . $this->config->item('tblPessoaEndereco') . '.complemento,'
                . $this->config->item('tblPessoaEndereco') . '.estado,'
                . $this->config->item('tblPessoaEndereco') . '.pais,'
                . $this->config->item('tblPessoaTipoFisica') . '.cpf,'
                . $this->config->item('tblPessoaTipoFisica') . '.data_nascimento,'
                . $this->config->item('tblPessoaDadosExtra') . '.nome_mae,'
                . $this->config->item('tblPessoaDadosExtra') . '.sexo,'
                . $this->config->item('tblPessoaUsuario') . '.usuario');

        $this->db->join($this->config->item('tblPessoaUsuario'), $this->config->item('tblPessoa') . '.id = ' . $this->config->item('tblPessoaUsuario') . '.pessoa_id', 'inner');
        $this->db->join($this->config->item('tblPessoaContato'), $this->config->item('tblPessoa') . '.id = ' . $this->config->item('tblPessoaContato') . '.pessoa_id', 'inner');
        $this->db->join($this->config->item('tblPessoaEndereco'), $this->config->item('tblPessoa') . '.id = ' . $this->config->item('tblPessoaEndereco') . '.pessoa_id', 'inner');
        $this->db->join($this->config->item('tblPessoaTipoFisica'), $this->config->item('tblPessoa') . '.id = ' . $this->config->item('tblPessoaTipoFisica') . '.pessoa_id', 'inner');
        $this->db->join($this->config->item('tblPessoaDadosExtra'), $this->config->item('tblPessoa') . '.id = ' . $this->config->item('tblPessoaDadosExtra') . '.pessoa_id', 'inner');

        $this->db->where($this->config->item('tblPessoaUsuario') . '.usuario', $_usuario);
        $this->db->where($this->config->item('tblPessoaUsuario') . '.senha', $_senha);

        $query = $this->db->get($this->config->item('tblPessoa'));

        //pre($this->db->last_query());

        if ($this->db->affected_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }

    public function consultar($_id) {
        $this->db->select($this->config->item('tblPessoaTipoFisica') . '.data_nascimento, '
                . $this->config->item('tblPessoaTipoFisica') . '.cpf, '
                . $this->config->item('tblPessoa') . '.status_id, '
                . $this->config->item('tblPessoa') . '.nome, '
                . $this->config->item('tblPessoa') . '.referencia, '
                . $this->config->item('tblPessoaContato') . '.email, '
                . $this->config->item('tblPessoaContato') . '.telefone');

        $this->db->where($this->config->item('tblPessoa') . '.id', $_id);

        $this->db->join($this->config->item('tblPessoaTipoFisica'), $this->config->item('tblPessoa') . '.id = ' . $this->config->item('tblPessoaTipoFisica') . '.pessoa_id', 'inner');
        $this->db->join($this->config->item('tblPessoaContato'), $this->config->item('tblPessoa') . '.id = ' . $this->config->item('tblPessoaContato') . '.pessoa_id', 'inner');

        $query = $this->db->get($this->config->item('tblPessoa'));

        if ($this->db->affected_rows() > 0) {
            return $query->row();
        } else {
            return NULL;
        }
    }

    public function consultar_pessoa_contato($_codigo) {
        $this->db->where($this->config->item('tblPessoaContato') . '.pessoa_id', $_codigo);

        $query = $this->db->get($this->config->item('tblPessoaContato'));

        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }

    public function consultar_pessoa_externa($_codigo) {
        $this->db->where($this->config->item('tblPessoaExterna') . '.codigo_usuario', $_codigo);

        $this->db->join($this->config->item('tblPessoaUsuario'), $this->config->item('tblPessoaExterna') . '.pessoa_id = ' . $this->config->item('tblPessoaUsuario') . '.pessoa_id', 'INNER');

        $query = $this->db->get($this->config->item('tblPessoaExterna'));

        if ($query->num_rows() > 0) {
            return $query->row();
        } else {
            return NULL;
        }
    }

    public function consultar_endereco($_id, $_tipo_id) {
        $this->db->where($this->config->item('tblPessoaEndereco') . '.pessoa_id', $_id);
        $this->db->where($this->config->item('tblPessoaEndereco') . '.pessoa_endereco_tipo_id', $_tipo_id);

        $query = $this->db->get($this->config->item('tblPessoaEndereco'));

        if ($query->num_rows() > 0) {
            return $query->row();
        } else {
            return NULL;
        }
    }

    public function consultar_total() {
        $this->db->select($this->config->item('tblPessoaTipoFisica') . '.pessoa_id, '
                . $this->config->item('tblPessoaTipoFisica') . '.cpf, '
                . $this->config->item('tblPessoa') . '.nome, '
                . $this->config->item('tblPessoa') . '.referencia, '
                . $this->config->item('tblPessoaStatusInfo') . '.nome as status');

        $this->db->where($this->config->item('tblLocalIdiomas') . '.codigo', $this->config->item('language'));

        $this->db->join($this->config->item('tblPessoa'), $this->config->item('tblPessoa') . '.id = ' . $this->config->item('tblPessoaTipoFisica') . '.pessoa_id', 'inner');
        $this->db->join($this->config->item('tblPessoaStatusInfo'), $this->config->item('tblPessoaStatusInfo') . '.pessoa_status_id = ' . $this->config->item('tblPessoa') . '.status_id', 'inner');
        $this->db->join($this->config->item('tblLocalIdiomas'), $this->config->item('tblLocalIdiomas') . '.id = ' . $this->config->item('tblPessoaStatusInfo') . '.local_idiomas_id', 'inner');

        $query = $this->db->get($this->config->item('tblPessoaTipoFisica'));

        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }

    public function get_estados_combo() {
        $_new_array = array();
        $_new_array[''] = 'Em todos os estados';
        $this->db->select('DISTINCT estado', false);
        $query = $this->db->get($this->config->item('dbCliente') . $this->config->item('tblPessoaEndereco'));
        //pre($this->db->last_query());
        if ($query->num_rows() > 0) {
            $dados = $query->result();
            foreach ($dados as $key) {
                $_new_array[$key->estado] = $key->estado;
            }
        }
        return $_new_array;
    }

    public function get_cidades_combo() {
        $_new_array = array();
        $_new_array[''] = 'Em todas as cidades';
        $this->db->select('DISTINCT cidade', false);
        $query = $this->db->get($this->config->item('dbCliente') . $this->config->item('tblPessoaEndereco'));
        //pre($this->db->last_query());
        if ($query->num_rows() > 0) {
            $dados = $query->result();
            foreach ($dados as $key) {
                $_new_array[$key->cidade] = $key->cidade;
            }
            return $_new_array;
        }
        return $_new_array;
    }

    public function get_pessoas_combo() {

        $this->db->order_by("nome", "ASC");
        $query = $this->db->get($this->config->item('dbCliente') . $this->config->item('tblPessoa'));

        if ($query->num_rows() > 0) {
            return $this->_combo_categorias_option($query->result());
        } else {
            return $this->_combo_categorias_option();
        }
    }


    private function _combo_categorias_option($dados = array(), $option = array()) {
        $_new_array = array();
        $_new_array[''] = 'Selecionar';
        if (count($dados) > 0) {
            foreach ($dados as $v) {
                $option[$v->id][$v->id] = $v->nome;
            }


            if (count($option) > 0) {
                foreach ($option as $value) {
                    foreach ($value as $ke => $va) {
                        $_new_array[$ke] = $va;
                    }
                }
            }
        }
        return $_new_array;
    }

}

?>
